$NG.AllReady(function (page, { useValuesChange, useClick, useDataIndexChange, useBeforeClick, useUpdateRows, useUpdateRow }) {
    // console.log("page is ready");
    // console.log($NG.getPageUI());
    // console.log($NG.getPageState());
    const mstform = $NG.getCmpApi("p_form_equipment_chg");
    const dgrid1 = $NG.getCmpApi("p_form_equipment_chg_d");
    const dgrid2 = $NG.getCmpApi("p_form_equipment_chg_impl");
    const dgrid3 = $NG.getCmpApi("p_form_equipment_chg_svc");
    const dgrid4 = $NG.getCmpApi("p_form_equipment_chg_rd");
    const dgrid5 = $NG.getCmpApi("p_form_equipment_chg_qz");
  
    const toolbarTop = $NG.getCmpApi("toolbar_top");
    const toolbar_dgrid = $NG.getCmpApi("toolbar_p_form_equipment_chg_d");
    const d1tool = $NG.getCmpApi("toolbar_p_form_equipment_chg_d");
    const d2tool = $NG.getCmpApi("toolbar_p_form_equipment_chg_impl");
    const d3tool = $NG.getCmpApi("toolbar_p_form_equipment_chg_svc");
    const d4tool = $NG.getCmpApi("toolbar_p_form_equipment_chg_rd");
  
    let project_total_amt = 0;
    let nfb_amt_vat = 0;
    let ncg_amt_vat = 0;
    let nzz_amt_vat = 0;
    let nfb_amt = 0;
    let ncg_amt = 0;
    let nzz_amt = 0;
    let cnt_amt = 0
    let cnt_amt_vat = 0
    let ss_amt = 0;
    let cg_amt = 0;
    let zz_amt = 0;
    let zz_amt_ori = 0
    let nfb_b = 0;
    let ncg_b = 0;
    let nzz_b = 0;
    let ss_b = 0;
    let cg_b = 0;
    let zz_b = 0;
    let onLock = true;
    let timeId = 0;
  
    /* toolbar */
  
    //隐藏表头表体单据引用按钮
    const toolbars = [
      { toolbar: toolbarTop, items: ["imp"] },
      { toolbar: d1tool, items: ["attachment"] },
      { toolbar: d2tool, items: ["imp"] },
      { toolbar: d3tool, items: ["imp"] },
      { toolbar: d4tool, items: ["imp"] },
    ];
    toolbars.forEach(({ toolbar, items }) => {
      if (toolbar && typeof toolbar.getItem === "function") {
        items.forEach((item) => {
          const button = toolbar.getItem(item);
          if (button) {
            button.setHidden(); // 隐藏按钮
          }
        });
      }
    });
  
    if (toolbar_dgrid) {
      toolbar_dgrid.getItem("imp").setProps({ children: "引用设备清单明细" });
  
      // 增加匹配物料
      toolbar_dgrid.insert({
        id: "user_match",
        text: "匹配物料",
        iconCls: "icon-InsertRow",
      });
      useClick(() => {
        window._list = [];
        window.sNum = 0;
        window.eNum = 0;
        $NG.message(`正在匹配物料，请等待完成，请勿操作！`);
        timeId = setInterval(() => {
          $NG.message(`正在匹配物料，总进度 ${(window.sNum / (dgrid1.getRows().length * 3 * 6)).toFixed(4) * 100}%`);
          if (window.sNum == window.eNum) {
            //发起请求
            $NG.message(`正在保存未有物料。总进度 50%！`);
            // console.log(`数据准备就绪`, window._list);
            clearInterval(timeId);
            getWlRequest(window._list);
          } else {
            window.eNum = window.sNum;
          }
        }, 1500);
        matchingWl();
      }, "user_match");
  
      // hideData
      d1tool.insert({
        id: "hideData",
        text: "隐藏原有数据",
        iconCls: "icon-New",
      });
  
      d1tool.insert({
        id: "showData",
        text: "显示原有数据",
        iconCls: "icon-New",
      });
  
      d1tool.insert({
        id: "sortData",
        text: "查询变更状态并勾选未变更",
        iconCls: "icon-New",
      });
  
      useClick(() => {
        hiddenOriKey(true);
      }, "hideData");
  
      useClick(() => {
        hiddenOriKey(false);
      }, "showData");
  
      useClick(() => {
        checkDataChange();
      }, "sortData");
    }
  
    //保存
    useBeforeClick(() => {
      let errorItemData = [];
      errorItemData = dgrid1.getData().reduce((value, item, index) => {
        if (item.u_sub_name.trim() && (!item.u_sub_name?.trim() || !String(item.u_sub_item_category || "").trim() || !String(item.u_sub_item_msunit || "").trim() || !item.u_sub_spec?.trim())) {
          value.push(index + 1);
        }
        return value;
      }, errorItemData);
      errorItemData = dgrid1.getData().reduce((value, item, index) => {
        if (item.u_pur_name.trim() && (!item.u_pur_name?.trim() || !String(item.u_pur_item_category || "").trim() || !String(item.u_pur_item_msunit || "").trim() || !item.u_pur_spec?.trim())) {
          value.push(index + 1);
        }
        return value;
      }, errorItemData);
      errorItemData = dgrid1.getData().reduce((value, item, index) => {
        if (item.u_self_name.trim() && (!item.u_self_name?.trim() || !String(item.u_self_item_category || "").trim() || !String(item.u_self_item_msunit || "").trim() || !item.u_self_spec?.trim())) {
          value.push(index + 1);
        }
        return value;
      }, errorItemData);
      errorItemData = Array.from(new Set(errorItemData)).sort((a, b) => a - b);
      if (errorItemData.length !== 0) {
        $NG.alert(`第 ${errorItemData.join("、")} 行，数据不符合规范。请查看规格、单位、分类是否有字段为空 或者 未匹配物料！`);
        return false;
      } else {
        return true;
      }
    }, "save");
  
    //隐藏所有表单的l来源id，自定义主键等
    //TODO 临时禁用 hiddenSourcePhid(["p_form_equipment_chg_d", "p_form_equipment_chg_impl", "p_form_equipment_chg_svc", "p_form_equipment_chg_rd", "p_form_equipment_chg_qz"], "p_form_equipment_chg");
    function hiddenSourcePhid(arr, header) {
      const keys = ["u_source_phid", "u_phid"];
      arr.forEach((item) => {
        keys.forEach((el) => {
          $NG.updateUI((updater) => {
            updater.editGrid[item][el].setProps({
              hidden: true,
            });
          });
        });
      });
      //单独隐藏表头
      if (!header) return;
      $NG.updateUI((updater) => {
        updater.fieldSetForm[header].u_source_phid.setProps({
          hidden: true,
        });
      });
    }
  
    //按钮隐藏
    // $NG.getCmpApi("toolbar_top").hideButton("addrow");
    const btn_arr = ["p_form_equipment_chg_impl", "p_form_equipment_chg_svc", "p_form_equipment_chg_rd", "p_form_equipment_chg_d"];
    btn_arr.forEach((item) => {
    //   console.log(item, $NG.getCmpApi(item));
      //   $NG
      //     .getCmpApi("toolbar_" + item)
      //     .getItem("addrow")
      //     .setHidden();
      //   $NG
      //     .getCmpApi("toolbar_" + item)
      //     .getItem("deleterow")
      //     .setHidden();
      if (item == "p_form_equipment_chg_d") {
        // $NG
        //   .getCmpApi("toolbar_" + item)
        //   .getItem("attachment")
        //   .setHidden();
      }
    });
  
    const ori_key = [
      "u_zzzdj_ori",
      "u_cnt_item_tax_rate_ori",
      "u_qty_ori",
      "u_cnt_prc_ori",
      "u_cnt_amt_vat_ori",
      "u_cnt_amt_ori",
      "u_sub_item_msunit_ori",
      "u_sub_qty_ori",
      "u_sub_name_ori",
      "u_sub_spec_ori",
      "u_sub_item_category_ori",
      "u_sub_guide_prc_ori",
      "u_sub_prc_ori",
      "u_sub_tax_rate_ori",
      "u_sub_cost_ori",
      "u_sub_cost_vat_ori",
      "u_sub_item_ori",
      "u_pur_name_ori",
      "u_pur_spec_ori",
      "u_pur_qty_ori",
      "u_pur_item_category_ori",
      "u_pur_item_msunit_ori",
      "u_pur_guide_prc_ori",
      "u_pur_prc_ori",
      "u_pur_tax_rate_ori",
      "u_pur_cost_ori",
      "u_pur_cost_vat_ori",
      "u_pur_item_ori",
      "u_self_qty_ori",
      "u_self_name_ori",
      "u_self_spec_ori",
      "u_self_item_category_ori",
      "u_self_item_msunit_ori",
      "u_self_item_ori",
      "u_self_prc_ori",
      "u_self_tax_rate_ori",
      "u_self_cost_ori",
      "u_self_cost_vat_ori",
    ];
    function hiddenOriKey(bool) {
      ori_key.forEach((item) => {
        $NG.updateUI((updater) => {
          updater.editGrid.p_form_equipment_chg_d[item].setProps({
            hidden: bool,
          });
        });
      });
    }
    const project_amt = {
      _amt: 0,
      //变更含税
      _amt_bg: 0,
      //未税
      _amt_ws: 0,
      sum: function () {
        $NG.updateState((updater) => {
          updater.data.p_form_equipment_chg.setProps({
            u_total_cost_amt_vat: this._amt,
            u_total_cost_amt: this._amt_ws,
            // u_total_cost_change: this._amt_bg,
          });
        });
      },
      set amt(value) {
        this._amt = Number(value);
        this.sum();
      },
      get amt() {
        return this._amt;
      },
      set amt_bg(value) {
        this._amt_bg = Number(value);
        this.sum();
      },
      get amt_bg() {
        return this._amt_bg;
      },
      set amt_ws(value) {
        this._amt_ws = Number(value);
        this.sum();
      },
      get amt_ws() {
        return this.amt_ws;
      },
    };
  
    ////////////////////////////////////////////////////////////--mstform
  
    if (mstform) {
      //隐藏页签
      filterQzTable();
      getPtInfoByPhid();
      cntMFilter();
      mstformUpdateUI();
      if (page.oType == "add") {
        mstform.getItem("u_alter_type").setValue("1");
  
        $NG
          .getCompMap()
          .get("__Tabs__")[0]
          .getApi()
          .updateItems((innerItems, activeKey) => {
            return [...innerItems.filter((item) => item.key !== "TabPage5")];
          });
        getCntCount("p_form_equipment_chg", "u_cnt_id", () => {
          getCntMInfoByPhid();
          // getSbqdDetailByCnt();
          danjvchaxun();
        });
      }
  
      const isNeedInit = ["add", "edit", "copy"].includes(page.oType);
      if (isNeedInit) {
        const billNameItem = mstform.getItem("bill_name");
        if (!billNameItem.getValue()) {
          billNameItem.setValue("设备清单变更");
        }
        getEqOri();
      }
    }
  
    useValuesChange(({ args }) => {
    //   console.log(`项目监听`, args);
      getEqOri();
      getPtInfoByPhid();
      getCntCount("p_form_equipment_chg", "u_cnt_id", () => {
        getCntMInfoByPhid();
        // getSbqdDetailByCnt();
      });
      cntMFilter();
      danjvchaxun();
    }, "p_form_equipment_chg.phid_pc");
  
    //监听合同
    useValuesChange(({ args }) => {
    //   console.log(`合同监听`, args);
      getCntMInfoByPhid();

    }, "p_form_equipment_chg_impl.u_cnt_id");
    useValuesChange(({ args }) => {
    //   console.log("测试测试", mstform.getItem("u_alter_type").getValue());
      filterQzTable();
    }, "p_form_equipment_chg.u_alter_type");
  
    if (dgrid1) {
      dgrid1UpdateUI();
  
      let isCalculating = false; //防止循环的标志
  
      //合同明细
      registerCalcGroup({
        dataKey: "p_form_equipment_chg_d",
        qtyField: "u_qty",
        prcField: "u_cnt_prc",
        amtField: "u_cnt_amt",
        extraFn: shsjQty, // 你已有的函数
      });
  
      // 拟分包
      registerCalcGroup({
        dataKey: "p_form_equipment_chg_d",
        qtyField: "u_sub_qty",
        prcField: "u_sub_prc",
        amtField: "u_sub_cost",
        extraFn: fbzbJhQty, // 你已有的函数
      });
    }
  
    //拟采购
    useDataIndexChange(({ args }) => {
      cgsqQty(args[0]);
    }, "u_pur_qty");
    //拟自制
    useDataIndexChange(({ args }) => {
      cpckQty(args[0]);
    }, "u_self_qty");
  
    //深化数量
    let shsj_Lock = 0
    function shsjQty(el) {
        if(shsj_Lock){
            clearTimeout(shsj_Lock)
            shsj_Lock = 0
        }
      shsj_Lock = setTimeout(()=>{
        $NG.execServer("getCurrentShsjQtyBySbqd", { phid: el.u_source_phid }, (res) => {
            console.log(`深化`, res);
            if (res.count == 0) return;
            const _data = JSON.parse(res.data)[0].extendObjects;
            if (el.u_qty < (Number(_data.qty) || 0)) {
              $NG.alert(`警告：深化设计已经深化${_data.qty}个，请确保深化数量小于等于当前数量`);
              el.u_qty = _data.qty;
              dgrid1.refreshView();
            }
          });
          shsj_Lock = 0
      },1500)
    }
    // 分包招标计划数量
    function fbzbJhQty(el) {
      $NG.execServer("getCurrentFbzbQtyBySbqd", { phid: el.u_source_phid }, (res) => {
        if (res.count == 0) return;
        const _data = JSON.parse(res.data)[0].extendObjects;
        if (el.u_sub_qty < (Number(_data.qty) || 0)) {
          $NG.alert(`警告：分包招标计划已申请${_data.qty}个，请确保招标数量小于等于当前数量`);
          el.u_sub_qty = _data.qty;
          dgrid1.refreshView();
        }
      });
    }
    // 采购申请数量
    function cgsqQty(el) {
      $NG.execServer("getCurrentCgsqQtySbqd", { phid: el.u_source_phid }, (res) => {
        if (res.count == 0) return;
        const _data = JSON.parse(res.data)[0].extendObjects;
        if (el.u_pur_qty < (Number(_data.qty) || 0)) {
          $NG.alert(`警告：采购申请已申请${_data.qty}个，请确保招标数量小于等于当前数量`);
          el.u_pur_qty = _data.qty;
          dgrid1.refreshView();
        }
      });
    }
    // 产品出库数量
    function cpckQty(el) {
      $NG.execServer("getCurrentCpckQtyBySbqd", { phid: el.u_source_phid }, (res) => {
        if (res.count == 0) return;
        const _data = JSON.parse(res.data)[0].extendObjects;
        if (el.u_pur_qty < (Number(_data.qty) || 0)) {
          $NG.alert(`警告：产品出库已出库${_data.qty}个，请确保出库数量小于等于当前数量`);
          el.u_pur_qty = _data.qty;
          dgrid1.refreshView();
        }
      });
    }
  
    //这里标识这些字段只要发生编辑，就让u_item_no变成null，用于匹配物料判断
    const editNfbKey = ["u_sub_name", "u_sub_spec", "u_sub_item_category", "u_sub_item_msunit"];
    const editNcg = ["u_pur_item_msunit", "u_pur_name", "u_pur_spec", "u_pur_item_category"];
    const editNzz = ["u_self_item_msunit", "u_self_name", "u_self_spec", "u_self_item_category"];
    editNfbKey.forEach((key) => {
      useDataIndexChange(({ args }) => {
        args[0].u_sub_item = null;
        dgrid1.refreshView();
      }, key);
    });
    editNcg.forEach((key) => {
      useDataIndexChange(({ args }) => {
        args[0].u_pur_item = null;
        dgrid1.refreshView();
      }, key);
    });
    editNzz.forEach((key) => {
      useDataIndexChange(({ args }) => {
        args[0].u_self_item = null;
        dgrid1.refreshView();
      }, key);
    });
    useUpdateRow(({ args }) => {
      const _data = args[0];
      matchingWl(_data);
      _data.done = false;
    //   _data.u_sub_cost_vat = (Number(_data.u_sub_prc) || 0) * (Number(_data.u_qty) || 0) * (1 + (Number(_data.u_sub_tax_rate) || 0));
    //   _data.u_pur_cost_vat = (Number(_data.u_pur_prc) || 0) * (Number(_data.u_qty) || 0) * (1 + (Number(_data.u_pur_tax_rate) || 0));
    //   _data.u_self_cost_vat = (Number(_data.u_self_prc) || 0) * (Number(_data.u_qty) || 0) * (1 + (Number(_data.u_self_tax_rate) || 0));
      dgrid1.refreshView();
    }, "p_form_equipment_chg_d");
    useUpdateRows( async ({ args }) => {
      const _arr = args[0];
      generate15DigitNumber(_arr);
      createSbqdNo(_arr);
      await getSbqdDetailByCPhid(_arr)
      totalSum(_arr, "p_form_equipment_chg_d");
    }, "p_form_equipment_chg_d");
  
    useUpdateRows(({ args }) => {
      const _arr = args[0];
      generate15DigitNumber(_arr);
      totalSum(_arr, "p_form_equipment_chg_impl");
    }, "p_form_equipment_chg_impl");
  
    useUpdateRows(({ args }) => {
      const _arr = args[0];
      generate15DigitNumber(_arr);
      totalSum(_arr, "p_form_equipment_chg_svc");
    }, "p_form_equipment_chg_svc");
  
    useUpdateRows(({ args }) => {
      const _arr = args[0];
      generate15DigitNumber(_arr);
      totalSum(_arr, "p_form_equipment_chg_rd");
    }, "p_form_equipment_chg_rd");
    useUpdateRows(({ args }) => {
      qzInfoToSbqdInfo();
  
    //   console.log("测试");
    }, "p_form_equipment_chg_qz");
  
    // 隐藏标签
    function filterQzTable() {
      if (mstform.getItem("u_alter_type").getValue() == "2") {
        $NG
          .getCompMap()
          .get("__Tabs__")[0]
          .getApi()
          .updateItems((innerItems, activeKey) => {
            return [...innerItems.filter((item) => true)];
          });
        getQzInfo();
        useUpdateRows(({ args }) => {
          const _arr = args[0];
          qzInfoToSbqdInfo();
        //   console.log("测试");
          //拿到来源id最大的编码
          let cntNO = Number(window.cnt_no_max) || 0;
          _arr.forEach((item) => {
            if (!item.u_source_phid) {
              cntNO += 1;
              item.u_cnt_no = cntNO;
            //   console.log(`合同编码生成`, cntNO);
            }
          });
          dgrid5.refreshView();
        }, "p_form_equipment_chg_qz");
      } else if (mstform.getItem("u_alter_type").getValue() == "1") {
        $NG
          .getCompMap()
          .get("__Tabs__")[0]
          .getApi()
          .updateItems((innerItems, activeKey) => {
            return [...innerItems.filter((item) => item.key !== "TabPage5")];
          });
      }
    }
  
    function mstformUpdateUI(params) {
    //   console.log("mstformUpdateUI");
  
      $NG.updateUI((updater, state) => {
        updater.fieldSetForm.p_form_equipment_chg.u_eq_ori.setProps({
          onDoubleClick() {
            var u_eq_ori = mstform.getItem("u_eq_ori").getValue();
            if (u_eq_ori) {
              const { origin, pathname } = window.location;
              const hash = `#/customform/detail?id=${u_eq_ori}&otype=view&busType=EFORM9000000031&isSso=1`; // 路径
              $NG.open(`${origin}${pathname}${hash}`, { AppTitle: "设备清单" });
              // }
            }
          },
        });
      });
    }
  
    function dgrid1UpdateUI(params) {
      $NG.updateUI((updater) => {
        updater.editGrid.p_form_equipment_chg_d.Cell168.setProps({
          headerStyle: {
            backgroundColor: "#e5e5e5",
          },
        });
      });
    }
  
    // 明细监听单元格的函数
    function registerCalcGroup({ dataKey, qtyField, prcField, amtField, extraFn }) {
      let isCalculating = false;
  
      // 数量变动：重新计算金额
      useDataIndexChange(({ args, instance }) => {
        if (isCalculating) return;
        isCalculating = true;
  
        args[0][amtField] = (args[0][qtyField] || 0) * (args[0][prcField] || 0);
        extraFn?.(args[0]);
        instance.updateRow(args[0]);
  
        isCalculating = false;
      }, `${dataKey}.${qtyField}`);
  
      // 金额变动：反算单价
      useDataIndexChange(({ args, instance }) => {
        if (isCalculating) return;
        isCalculating = true;
  
        const qty = args[0][qtyField] || 0;
        args[0][prcField] = qty !== 0 ? args[0][amtField] / qty : 0;
        instance.updateRow(args[0]);
  
        isCalculating = false;
      }, `${dataKey}.${amtField}`);
  
      // 单价变动：重新计算金额
      useDataIndexChange(({ args, instance }) => {
        if (isCalculating) return;
        isCalculating = true;
  
        args[0][amtField] = (args[0][qtyField] || 0) * (args[0][prcField] || 0);
        instance.updateRow(args[0]);
  
        isCalculating = false;
      }, `${dataKey}.${prcField}`);
    }
  
    //生成明细主键
    function generate15DigitNumber(arr) {
      if (!arr) {
        let str = "";
        // 获取当前时间戳
        let timestamp = Date.now().toString();
        // 如果时间戳不足 15 位，计算需要补充的位数
        let remainingLength = 15 - timestamp.length;
        if (remainingLength > 0) {
          // 生成指定长度的随机数
          let randomPart = "";
          for (let i = 0; i < remainingLength; i++) {
            randomPart += Math.floor(Math.random() * 10);
          }
          // 将时间戳和随机数拼接成 15 位数字
          str = String(timestamp + randomPart);
        } else {
          // 如果时间戳长度超过 15 位，截取前 15 位
          str = String(timestamp.slice(0, 15));
        }
        return str;
      }
  
      arr.forEach((item) => {
        let str = "";
        // 获取当前时间戳
        let timestamp = Date.now().toString();
        // 如果时间戳不足 15 位，计算需要补充的位数
        let remainingLength = 15 - timestamp.length;
        if (remainingLength > 0) {
          // 生成指定长度的随机数
          let randomPart = "";
          for (let i = 0; i < remainingLength; i++) {
            randomPart += Math.floor(Math.random() * 10);
          }
          // 将时间戳和随机数拼接成 15 位数字
          str = String(timestamp + randomPart);
        } else {
          // 如果时间戳长度超过 15 位，截取前 15 位
          str = String(timestamp.slice(0, 15));
        }
        if (!item.u_phid) {
            item.u_source_phid = str
          item.u_phid = str;
          dgrid1.refreshView();
          dgrid2.refreshView();
          dgrid3.refreshView();
          dgrid4.refreshView();
        }
      });
    }
  
    //生成设备清单编码
    function createSbqdNo(arr) {
      arr.forEach(function (item) {
        if (!item.u_eq_item_no) {
          item.u_eq_item_no = String(Date.now());
        }
      });
    }
  
    // 获取变更前设备清单信息
    function getEqOri() {
    //   console.log("获取变更前设备清单信息");
      let phid_pc = mstform.getItem("phid_pc").getValue();
      try {
        $NG.execServer("getEqOri", { phid_pc: phid_pc }, function (res) {
        //   console.log("getEqOri", res);
          if (res.count > 0) {
            const data = JSON.parse(res.data)[0].extendObjects; //单返回值
            // console.log(data);
            $NG.updateState((updater) => {
              updater.data.p_form_equipment_chg.setProps({
                u_eq_ori: {
                  value: data.phid,
                  label: data.bill_name,
                },
                u_cnt_amt_ori: data.u_cnt_amt,
                u_cnt_amt_vat_ori: data.u_cnt_amt_vat,
                u_total_cost_amt_ori: data.u_total_cost_amt,
                u_total_cost_amt_vat_ori: data.u_total_cost_amt_vat,
                u_revenue_cost_gm_ori: data.u_revenue_cost_gm,
                u_signed_gm_rate_ori: data.u_signed_gm_rate,
                u_bid_gm_rate_ori: data.u_bid_gm_rate,
  
                u_sub_cost_amt_ori: data.u_sub_cost_amt,
                u_sub_cost_amt_vat_ori: data.u_sub_cost,
                u_sub_cost_ratio_ori: data.u_sub_cost_ratio,
  
                u_pur_cost_amt_ori: data.u_pur_cost_amt,
                u_pur_cost_amt_vat_ori: data.u_pur_cost_vat,
                u_pur_cost_ratio_ori: data.u_pur_cost_ratio,
  
                u_self_cost_amt_ori: data.u_self_cost,
                u_self_cost_amt_vat_ori: data.u_self_cost_vat,
                u_self_cost_ratio_ori: data.u_self_cost_ratio,
  
                u_implement_amt_vat_ori: data.u_implement_amt,
                u_implement_cost_ratio_ori: data.u_implement_cost_ratio,
  
                u_svc_cost_amt_vat_ori: data.u_svc_cost_amt,
                u_svc_cost_ratio_ori: data.u_svc_cost_ratio,
  
                u_sec_dev_amt_ori: data.u_svc_cost_amt,
                u_sec_dev_ratio_ori: data.u_svc_cost_ratio,
  
                u_source_phid: data.phid,
              });
            });
          } else {
            // console.log("功能扩展暂无数据");
          }
        });
      } catch (error) {
        console.error("功能扩展报错:", error);
      }
    }
  
    function totalSum(data, table) {
      // 触发了锁，等待解锁
    //   console.log(`当前锁状态`,onLock);
      while (!onLock) {}
      onLock = false;
      const _arr = data;
      switch (table) {
        case "p_form_equipment_chg_d":
          //含税成本
          nfb_amt_vat = 0;
          ncg_amt_vat = 0;
          nzz_amt_vat = 0;
          //未税成本
          nfb_amt = 0;
          ncg_amt = 0;
          nzz_amt = 0;
          // 合同
          cnt_amt = 0
          cnt_amt_vat = 0
          break;
        case "p_form_equipment_chg_impl":
          ss_amt = 0;
          break;
        case "p_form_equipment_chg_svc":
          cg_amt = 0;
          break;
        case "p_form_equipment_chg_rd":
          zz_amt = 0;
          zz_amt_ori = 0
          break;
      }
      _arr.forEach((item) => {
        item.u_bglx = "normal";
        //汇总表头
        switch (table) {
          case "p_form_equipment_chg_d":
            console.log(`拟分包查询`,(Number(item.u_sub_prc) || 0) , (Number(item.u_qty) || 0) , (1 + (Number(item.u_sub_tax_rate) || 0)));
            item.u_sub_cost_vat = (Number(item.u_sub_prc) || 0) * (Number(item.u_sub_qty) || 0) * (1 + (Number(item.u_sub_tax_rate) || 0));
            item.u_pur_cost_vat = (Number(item.u_pur_prc) || 0) * (Number(item.u_pur_qty) || 0) * (1 + (Number(item.u_pur_tax_rate) || 0));
            item.u_self_cost_vat = (Number(item.u_self_prc) || 0) * (Number(item.u_self_qty) || 0) * (1 + (Number(item.u_self_tax_rate) || 0));
            item.u_cnt_amt = (Number(item.u_qty) || 0) * (Number(item.u_cnt_prc) || 0)
            item.u_cnt_amt_vat = (Number(item.u_qty) || 0) * (Number(item.u_cnt_prc_vat) || 0)
            //含税成本
            nfb_amt_vat += Number(item.u_sub_cost_vat) || 0;
            ncg_amt_vat += Number(item.u_pur_cost_vat) || 0;
            nzz_amt_vat += Number(item.u_self_cost_vat) || 0;
            //未税成本
            nfb_amt += Number(item.u_sub_cost) || 0;
            ncg_amt += Number(item.u_pur_cost) || 0;
            nzz_amt += Number(item.u_self_cost) || 0;
            //合同清单
            cnt_amt += (Number(item.u_cnt_amt) || 0)
            cnt_amt_vat += (Number(item.u_cnt_amt_vat) || 0)
            break;
          case "p_form_equipment_chg_impl":
            ss_amt += Number(item.u_total_impl_amt) || 0;
            break;
          case "p_form_equipment_chg_svc":
            cg_amt += Number(item.u_total_svc_amt) || 0;
            break;
          case "p_form_equipment_chg_rd":
            zz_amt += Number(item.u_rd_expenses) || 0;
            zz_amt_ori += Number(item.u_rd_expenses_ori) || 0;
            break;
        }
      });
      //汇总总额
      project_total_amt = nfb_amt_vat + ncg_amt_vat + nzz_amt_vat + ss_amt + cg_amt + zz_amt;
      //比例
      switch (table) {
        case "p_form_equipment_chg_d":
          nfb_b = Number(nfb_amt_vat / project_total_amt) || 0;
          ncg_b = Number(ncg_amt_vat / project_total_amt) || 0;
          nzz_b = Number(nzz_amt_vat / project_total_amt) || 0;
          break;
        case "p_form_equipment_chg_impl":
          ss_b = Number(ss_amt / project_total_amt) || 0;
          break;
        case "p_form_equipment_chg_svc":
          cg_b = Number(cg_amt / project_total_amt) || 0;
          break;
        case "p_form_equipment_chg_rd":
          zz_b = Number(zz_amt / project_total_amt) || 0;
          break;
      }
  
      setTimeout(() => {
        //计算差额
        console.log(`调试`,nfb_amt_vat - (Number(mstform.getItem("u_sub_cost_amt_vat_ori").getValue()) || 0),nfb_amt_vat , (Number(mstform.getItem("u_sub_cost_amt_vat_ori").getValue()) || 0));
        const subgapvat = nfb_amt_vat - (Number(mstform.getItem("u_sub_cost_amt_vat_ori").getValue()) || 0);
        const purgapvat = ncg_amt_vat - mstform.getItem("u_pur_cost_amt_vat_ori").getValue();
        const selfgapvat = nzz_amt_vat - mstform.getItem("u_self_cost_amt_vat_ori").getValue();
        const subgap = nfb_amt - mstform.getItem("u_sub_cost_amt_ori").getValue();
        const putgap = ncg_amt - mstform.getItem("u_pur_cost_amt_ori").getValue();
        const selfgap = nzz_amt - mstform.getItem("u_self_cost_amt_ori").getValue();
        const fwgapvat = ss_amt - mstform.getItem("u_implement_amt_vat_ori").getValue();
        const svcgapvat = cg_amt - mstform.getItem("u_svc_cost_amt_vat_ori").getValue();
        const subbgap = nfb_b - mstform.getItem("u_sub_cost_ratio_ori").getValue();
        const purbgap = ncg_b - mstform.getItem("u_pur_cost_ratio_ori").getValue();
        const selfbgap = nzz_b - mstform.getItem("u_self_cost_ratio_ori").getValue();
        const ssgap = ss_b - mstform.getItem("u_implement_cost_ratio_ori").getValue();
        const svcbgap = cg_b - mstform.getItem("u_svc_cost_ratio_ori").getValue();
        const zzgap = zz_amt - zz_amt_ori
        const cntamtgap = cnt_amt - mstform.getItem("u_cnt_amt_ori").getValue();
        const cntamtgapvat = cnt_amt_vat - mstform.getItem("u_cnt_amt_vat_ori").getValue();
        console.log(
            "费用差额查询",
            "subgap=" + subgap +
            ", putgap=" + putgap +
            ", selfgap=" + selfgap +
            ", fwgapvat=" + fwgapvat +
            ", svcgapvat=" + svcgapvat +
            ", zzgap=" + zzgap
          );
          console.log("费用查询含税",nfb_amt_vat,mstform.getItem("u_sub_cost_amt_vat_ori").getValue(),`subgapvat=${subgapvat}, purgapvat=${purgapvat}, selfgapvat=${selfgapvat}, fwgapvat=${fwgapvat}, svcgapvat=${svcgapvat}, zzgap=${zzgap}`);
          $NG.updateState((updater) => {
          updater.data.p_form_equipment_chg.setProps({
            u_sub_cost_amt_vat: nfb_amt_vat,
            u_pur_cost_amt_vat: ncg_amt_vat,
            u_self_cost_amt_vat: nzz_amt_vat,
            u_sub_cost_amt: nfb_amt,
            u_pur_cost_amt: ncg_amt,
            u_self_cost_amt: nzz_amt,
            u_implement_amt_vat: ss_amt,
            u_implement_amt: ss_amt,
            u_svc_cost_amt_vat: cg_amt,
            u_svc_cost_amt: cg_amt,
            u_sec_dev_amt:zz_amt,
            u_sub_cost_ratio: nfb_b,
            u_pur_cost_ratio: ncg_b,
            u_self_cost_ratio: nzz_b,

            u_implement_cost_ratio: ss_b,
            u_svc_cost_ratio: cg_b,
            u_sec_dev_ratio: zz_b,
  
            u_sub_cost_amt_vat_gap: subgapvat,
            u_pur_cost_amt_vat_gap: purgapvat,
            u_self_cost_amt_vat_gap: selfgapvat,

            u_sub_cost_amt_gap: subgap,
            u_pur_cost_amt_gap: putgap,
            u_self_cost_amt_gap: selfgap,

            u_implement_amt_vat_gap: fwgapvat,
            u_svc_cost_amt_vat_gap: svcgapvat,

            u_sub_cost_ratio_gap: subbgap,
            u_pur_cost_ratio_gap: purbgap,
            u_self_cost_ratio_gap: selfbgap,

            u_implement_cost_ratio_gap: ssgap,
            u_svc_cost_ratio_gap: svcbgap,
            u_sec_dev_amt_gap:zzgap,

            // 本次变更后
            u_total_cost_change:subgap + putgap + selfgap + fwgapvat + svcgapvat + zzgap, // 未税成本
            u_total_cost_change_vat: subgapvat + purgapvat + selfgapvat + fwgapvat  + svcgapvat + zzgap,// 含税成本
            // 合同清单相关
            u_cnt_amt_chg : cntamtgap,
            u_cnt_amt_vat_chg : cntamtgapvat,

            u_cnt_amt:(Number(mstform.getItem("u_cnt_amt_ori").getValue()) || 0) + cntamtgap,
            u_cnt_amt_vat:(Number(mstform.getItem("u_cnt_amt_vat_ori").getValue()) || 0) + cntamtgapvat,
            u_total_cost_amt:(Number(mstform.getItem("u_total_cost_amt_ori").getValue()) || 0) + subgap + putgap + selfgap + fwgapvat + svcgapvat + zzgap,
            u_total_cost_amt_vat:(Number(mstform.getItem("u_total_cost_amt_vat_ori").getValue()) || 0) + subgapvat + purgapvat + selfgapvat + fwgapvat  + svcgapvat + zzgap,
            // 毛利
            u_revenue_cost_gm_chg:cntamtgap - (subgap + putgap + selfgap + fwgapvat + svcgapvat + zzgap),
            u_revenue_cost_gm:(cntamtgap - (subgap + putgap + selfgap + fwgapvat + svcgapvat + zzgap)) + ((Number(mstform.getItem("u_revenue_cost_gm_ori").getValue()) || 0)),
            u_signed_gm_rate_chg:(cntamtgap - (subgap + putgap + selfgap + fwgapvat + svcgapvat + zzgap)) / (cntamtgap),
            u_signed_gm_rate: (Number(((cntamtgap - (subgap + putgap + selfgap + fwgapvat + svcgapvat + zzgap)) / (cntamtgap))) || 0) + (Number(mstform.getItem("u_signed_gm_rate_ori").getValue()) || 0),
            // 投标u_signed_gm_rate_chg
            u_bid_gm_rate_chg:Boolean(cntamtgap)?((cntamtgap - (subgap + putgap + selfgap + fwgapvat + svcgapvat + zzgap) - (Number(mstform.getItem("u_win_bid_svc_amt").getValue()) || 0)) / (cntamtgap)):0,
            u_bid_gm_rate: (Boolean(cntamtgap)?((cntamtgap - (subgap + putgap + selfgap + fwgapvat + svcgapvat + zzgap) - (Number(mstform.getItem("u_win_bid_svc_amt").getValue()) || 0)) / (cntamtgap)):0) + (Number(mstform.getItem("u_bid_gm_rate_ori").getValue()) || 0)
          });

        });
      }, 200);
      //项目金额变更汇总
      project_amt.amt_bg = project_total_amt;
    //   console.log(`汇总变更`, project_amt.amt_bg, nfb_amt_vat, ncg_amt_vat, nzz_amt_vat, ss_amt, cg_amt, zz_amt);
      onLock = true;
      dgrid1.refreshView();
    }
  
    //匹配物料请求
    async function getWlRequest(list) {
      const response = await fetch("http://nginx.clouddev.hisense.com/sd/interior/createResourceFileSync", {
        method: "POST",
        headers: {
          "Content-Type": "application/json", // 设置请求头
        },
        body: JSON.stringify(list),
      });
      const res = await response.json();
      if (res.IsOk) {
        //新增成功
        $NG.message(`保存成功，正在重新校验 90%！`);
        matchingWl(); //重新匹配
        $NG.alert(`匹配物料完成！ 100%`);
      } else {
        if (res.data == "批量新增失败，入参为空！") {
          $NG.alert("匹配完成！");
        } else {
          $NG.alert("匹配错误！");
        }
      }
    }
  
    function getPtInfoByPhid() {
      if (mstform.getItem("phid_pc").getValue()) {
        $NG.execServer("getPtInfoByPhid", { phid: mstform.getItem("phid_pc").getValue() }, function (res) {
          const datas = JSON.parse(res.data)[0].extendObjects;
        //   console.log(datas);
          $NG.updateState((updater) => {
            updater.data.p_form_equipment_chg.setProps({
              //项目编码
              u_pc_no: datas.pc_no,
              //项目金额
              approx_contract_fc: datas.approx_contract_fc,
              //计划开工日期
              start_date: datas.start_date,
              //计划完工日期
              end_date: datas.end_date,
              //售前顾问
              u_sqgw: {
                value: datas.user_sqgw_phid,
                label: datas.user_sqgw_name,
              },
              //项目经理
              u_project_manager: {
                value: datas.project_manager_phid,
                label: datas.project_manager_name,
              },
              //事业部
              u_division: {
                value: datas.division_phid,
                label: datas.division_name,
              },
              //组织
              phid_org_phid: {
                value: datas.phid_org_phid,
                label: datas.phid_org_name,
              },
              //区域中心
              u_regional_center: {
                value: datas.regional_center_phid,
                label: datas.regional_center_name,
              },
              //产品线
              u_product_line: {
                value: datas.midwife_phid,
                label: datas.midwife_name,
              },
              //客户名称
              customer: {
                value: datas.customer_id,
                label: datas.customer_name,
              },
              //部门
              u_dept: {
                value: datas.dept_phid,
                label: datas.dept_name,
              },
              //项目类型
              u_pc_type: {
                value: datas.type_phid,
                label: datas.type_name,
              },
              //项目预算组织编码
              budget_org_code: datas.budget_org_no,
              //项目预算组织
              budget_org_phid: {
                value: datas.budget_org_phid,
                label: datas.budget_org_name,
              },
            });
          });
        });
      }
    }
  
    function cntMFilter() {
      $NG.updateUI((updater, state) => {
        updater.fieldSetForm.p_form_equipment_chg.u_cnt_id.setProps({
          onBeforeOpen: async () => {
            var phid_pc = mstform.getItem("phid_pc").getValue();
            if (!phid_pc) {
              $NG.alert("请先选择项目");
              return false;
            } else {
              return true;
            }
          },
          ...(!!mstform.getItem("phid_pc").getValue() && {
            clientSqlFilter: {
              bill_type: 1,
              phid_pc: mstform.getItem("phid_pc").getValue(),
            },
          }),
        });
      });
    }
  
    function getCntMInfoByPhid(params) {
      $NG.execServer("getCntMInfoByPhid", { phid: mstform.getItem("u_cnt_id").getValue() }, function (res) {
        const datas = JSON.parse(res.data)[0].extendObjects;
        // console.log(datas);
        $NG.updateState((updater) => {
          updater.data.p_form_equipment_chg.setProps({
            u_cnt_no: datas.pcm_no, //合同编号
            start_dt: datas.start_dt, //约定开工时间
            end_dt: datas.end_dt, //约定完工时间
            u_total_cnt_amt_vat: datas.cnt_sum_vat_fc, //合同金额
            u_cnt_amt_vat: datas.cnt_sum_vat_fc, //合同金额
            cnt_sum_vat_fc: datas.cnt_sum_vat_fc, //合同价税合计
            //产品线
            user_product_line: {
              value: datas.midwife_phid,
              label: datas.midwife_name,
            },
            //合同类型
            u_cnt_type: {
              value: datas.pct_id,
              label: datas.pct_name,
            },
            //甲方单位
            u_customer: {
              value: datas.customer_id,
              label: datas.customer_name,
            },
            //乙方单位
            supply: {
              value: datas.supply_id,
              label: datas.supply_name,
            },
            //发票类型
            u_invoice_type: {
              value: datas.invoice_type_phid,
              label: datas.invoice_type_name,
            },
            //购方信息（客户信息）（收票单位信息）
            //单位名称
            tick_id: {
              value: datas.tick_id,
              label: datas.tick_name,
            },
            //单位编码
            tick_no: datas.tick_no,
            //社会信用代码
            tick_unisocialcredit: datas.tick_unisocialcredit,
            //单位地址
            tick_taxaddress: datas.tick_taxaddress,
            //联系电话
            tick_taxtelephone: datas.tick_taxtelephone,
            //银行名称
            tick_taxbankid: {
              value: datas.tick_taxbankid,
              label: datas.tick_taxbankname,
            },
            //银行账号
            tick_taxaccountno: datas.tick_taxaccountno,
            //销方信息（供应商信息）（开票单位信息）
            //单位名称
            inv_id: { value: datas.inv_id, label: datas.inv_name },
            //单位编码
            inv_no: datas.inv_no,
            //社会信用代码
            inv_unisocialcredit: datas.inv_unisocialcredit,
            //单位地址
            inv_taxaddress: datas.inv_taxaddress,
            //联系电话
            inv_taxtelephone: datas.inv_taxtelephone,
            //银行名称
            inv_taxbankid: {
              value: datas.inv_taxbankid,
              label: datas.inv_taxbankname,
            },
            //银行账号
            inv_taxaccountno: datas.inv_taxaccountno,
          });
        });
        getQzInfo();
      });
    }
  
    // 获取设备清单明细
    async function getSbqdDetailByCPhid(arr) {
        for(let i = 0; i < arr.length; i++) {
            const row = arr[i];
            if(row.u_eq_item_name){
                continue
            }
            const phid = row.u_source_phid
            if (!phid) return;
            await $NG.execServer("getSbqdDetailByCnt", { phid }, function (res) {
                if (res.count == 0) return;
                //明细数组
                const item = JSON.parse(res.data)[0].extendObjects
                console.log("获取明细单条", item);
                const _tempArr = [];
                // let projectAmt = 0;
                // let projectAmt_ws = 0;
                let _temp = {
                    u_source_phid: item.phid,
                    u_phid:item.phid,
                    u_change_type: 1,
                    u_revenue_type: item.u_revenue_type,
                    u_eq_item_name: item.u_equipment_list_name,
                    u_revenue_type_EXName: item.ur_exname,
                    u_pc_subitem_category: item.u_pc_subitem_category,
                    u_eq_item_no: item.u_equipment_list_no,
                    u_cnt_item_no: item.u_cnt_item_no,
                    u_cnt_item: item.u_cnt_item,
                    u_cnt_item_EXName: item.u_cnt_item_exname,
                    u_spec: item.u_spec,
                    u_tech_params: item.u_tech_params,
                    u_brand: item.u_brand,
                    u_brand_EXName: item.u_brand_exname,
                    u_is_self: item.u_is_self,
                    u_is_standardized: item.u_is_standardized_tech_params,
                    u_msunit: item.u_msunit,
                    u_msunit_EXName: item.u_msunit_exname,
                    u_qty: item.u_qty,
                    u_cnt_item_tax_rate: item.u_cnt_item_tax_rate,
                    u_cnt_item_tax_rate_ori: item.u_cnt_item_tax_rate,
                    u_cnt_prc: item.u_cnt_prc,
                    u_cnt_prc_vat: item.u_cnt_prc_vat,
                    u_cnt_prc_vat_ori: item.u_cnt_prc_vat,
                    u_cnt_amt_vat: item.u_cnt_amt_vat, //合同含税金额
                    u_cnt_amt: item.u_cnt_amt,
                    u_qty_ori: item.u_qty,
                    u_cnt_prc_ori: item.u_cnt_prc,
                    u_cnt_amt_vat_ori: item.u_cnt_amt_vat, //合同含税金额
                    u_cnt_amt_ori: item.u_cnt_amt,
        
                    u_sub_name: item.u_sub_name,
                    u_sub_spec: item.u_sub_ggxh,
                    u_sub_item_msunit: item.u_sub_item_msunit,
                    u_sub_item_msunit_EXName: item.u_sub_item_msunit_exname,
                    u_sub_item_msunit_ori: item.u_sub_item_msunit,
                    u_sub_item_msunit_ori_EXName: item.u_sub_item_msunit_exname,
                    u_sub_item_category: item.u_sub_item_category,
                    u_sub_item_category_EXName: item.u_sub_item_category_exname,
                    u_sub_qty: item.u_sub_qty,
                    u_sub_qty_EXName: item.u_sub_qty_exname,
                    u_sub_qty_ori: item.u_sub_qty,
                    u_sub_name_ori: item.u_sub_name,
                    u_sub_spec_ori: item.u_sub_ggxh,
                    u_sub_item_category_ori: item.u_sub_item_category,
                    u_sub_item_category_ori_EXName: item.u_sub_item_category_exname,
                    u_sub_guide_prc: item.u_fwgczdj,
                    u_sub_guide_prc_ori: item.u_fwgczdj,
                    u_sub_prc: item.u_sub_prc,
                    u_sub_prc_ori: item.u_sub_prc,
                    u_sub_tax_rate: item.u_sub_tax_rate,
                    u_sub_tax_rate_ori: item.u_sub_tax_rate,
                    u_sub_cost: item.u_sub_cost,
                    u_sub_cost_ori: item.u_sub_cost,
                    u_sub_cost_vat: item.u_sub_cost_vat,
                    u_sub_cost_vat_ori: item.u_sub_cost_vat,
                    u_sub_item: item.u_sub_item,
                    u_sub_item_EXName: item.u_sub_item_exname,
                    u_sub_item_ori: item.u_sub_item,
                    u_sub_item_ori_EXName: item.u_sub_item_exname,
        
                    u_pur_name: item.u_pur_name, //拟采购项名称
                    u_pur_spec: item.u_pur_ggxh, // 拟采购规格
                    u_pur_item_category: item.u_pur_item_category,
                    u_pur_item_category_EXName: item.u_pur_item_category_exname,
                    u_pur_name_ori: item.u_pur_name, //拟采购项名称
                    u_pur_spec_ori: item.u_pur_ggxh, // 拟采购规格
                    u_pur_qty: item.u_pur_qty,
                    u_pur_qty_EXName: item.u_pur_qty_exname,
                    u_pur_qty_ori: item.u_pur_qty,
                    u_pur_item_category_ori: item.u_pur_item_category,
                    u_pur_item_category_ori_EXName: item.u_pur_item_category_exname,
                    u_pur_guide_prc: item.u_cgzdj,
                    u_pur_item_msunit: item.u_pur_item_msunit,
                    u_pur_item_msunit_EXName: item.u_pur_item_msunit_exname,
                    u_pur_item_msunit_ori: item.u_pur_item_msunit,
                    u_pur_item_msunit_ori_EXName: item.u_pur_item_msunit_exname,
                    u_pur_guide_prc_ori: item.u_cgzdj,
                    u_pur_prc: item.u_pur_prc,
                    u_pur_prc_ori: item.u_pur_prc,
                    u_pur_tax_rate: item.u_pur_tax_rate,
                    u_pur_tax_rate_ori: item.u_pur_tax_rate,
                    u_pur_cost: item.u_pur_cost,
                    u_pur_cost_ori: item.u_pur_cost,
                    u_pur_cost_vat: item.u_pur_cost_vat,
                    u_pur_cost_vat_ori: item.u_pur_cost_vat,
                    u_pur_item: item.u_pur_item,
                    u_pur_item_EXName: item.u_pur_item_exname,
                    u_pur_item_ori: item.u_pur_item,
                    u_pur_item_ori_EXName: item.u_pur_item_exname,
        
                    u_zzzdj: item.u_zzzdj,
                    u_zzzdj_ori: item.u_zzzdj,
                    u_self_name: item.u_self_name, //拟自制名称
                    u_self_spec: item.u_self_ggxh,
                    u_self_item_category: item.u_self_item_category,
                    u_self_item_category_EXName: item.u_self_item_category_exname,
                    u_self_item_msunit: item.u_self_item_msunit,
                    u_self_item_msunit_EXName: item.u_self_item_msunit_exname,
                    u_self_qty: item.u_self_qty,
                    u_self_qty_EXName: item.u_self_qty_exname,
                    u_self_qty_ori: item.u_self_qty,
                    u_self_item: item.u_self_item,
                    u_self_item_EXName: item.u_self_item_exname,
                    u_self_name_ori: item.u_self_name, //拟自制名称
                    u_self_spec_ori: item.u_self_ggxh,
                    u_self_item_category_ori: item.u_self_item_category,
                    u_self_item_category_ori_EXName: item.u_self_item_category_exname,
                    u_self_item_msuni_ori: item.u_self_item_msunit,
                    u_self_item_msunit_ori_EXName: item.u_self_item_msunit_exname,
                    u_self_item_ori: item.u_self_item,
                    u_self_item_ori_EXName: item.u_self_item_exname,
                    u_self_prc: item.u_self_prc,
                    u_self_prc_ori: item.u_self_prc,
                    u_self_tax_rate: item.u_self_tax_rate,
                    u_self_tax_rate_ori: item.u_self_tax_rate,
                    u_self_cost: item.u_self_cost,
                    u_self_cost_ori: item.u_self_cost,
                    u_self_cost_vat: item.u_self_cost_vat,
                    u_self_cost_vat_ori: item.u_self_cost_vat,
                    u_status: "0",
                    done: true, //用于标识已经存在于物料库，用于跳过物料匹配，如果行发生编辑会变成false
                }
                console.log(`拟分包金额异常检查`,_temp);
                // 在不改变栈内存地址情况下赋值
                for(let key in _temp){
                    row[key] = _temp[key]
                }
                const _data = dgrid1.getData()
                // _data.forEach((item) => {
                // 存储备用
                if(!window._catch_init_darr){window._catch_init_darr = []}
                window._catch_init_darr.push(_temp)
                window._catch_init_darr = _tempArr.reduce((value, item) => {
                    value.push({ ...item });
                    return value;
                }, []);
                window._catch_init_dkey = [];
                for (let key in _temp) {
                    window._catch_init_dkey.push(key);
                }
                //   //汇总项目含税总额
                //   projectAmt += (Number(item.u_sub_cost_vat) || 0) + (Number(item.u_pur_cost_vat) || 0) + (Number(item.u_self_cost_vat) || 0);
                //   projectAmt_ws += (Number(item.u_sub_cost) || 0) + (Number(item.u_pur_cost) || 0) + (Number(item.u_self_cost) || 0);
                // });
                // project_amt.amt = projectAmt;
                // project_amt.amt_ws = projectAmt_ws;
                // dgrid1.clearRows().then(() => {
                //   dgrid1.addRows(_tempArr);
                // });
            });
        }
        dgrid1.refreshView();
    }
  
    // 检查数据是否发生更改
    function checkDataChange() {
      const arr = dgrid1.getRows();
      arr.forEach((item) => {
        // 找到响应的缓存
        const el = window._catch_init_darr.filter((it) => {
          if (it.u_source_phid == item.u_source_phid) {
            return it;
          }
        });
        if (el.length != 0) {
          window._catch_init_dkey.forEach((key) => {
            if (!el[0][key]) {
              if (item[key]) {
                item.u_status = "1";
                // console.log(key, el[0][key], item[key]);
              }
            } else {
              if (el[0][key] != item[key]) {
                item.u_status = "1";
                // console.log(key, el[0][key], item[key]);
              }
            }
          });
        }
        if (item.u_status == "0") {
          item.checked = true;
        }
      });
      const _temp = arr.sort((a, b) => Number(b.u_status) - Number(a.u_status));
      dgrid1.clearRows().then(() => {
        dgrid1.addRows(_temp);
      });
    }
  
    //判断 arr1 和 arr2 的交集和补集
    function compareArrays(arr1, arr2) {
      const result = [[], [], []];
  
      // 遍历 arr1，找出 arr1 有但 arr2 没有的元素
      arr1.forEach((item1) => {
        const billNo1 = item1.u_bill_no;
        const isFoundInArr2 = arr2.some((item2) => item2.bill_no == billNo1);
  
        if (!isFoundInArr2) {
          result[0].push(item1);
        }
      });
  
      // 遍历 arr2，找出 arr2 有但 arr1 没有的元素
      arr2.forEach((item2) => {
        const billNo2 = item2.bill_no;
        const isFoundInArr1 = arr1.some((item1) => item1.u_bill_no == billNo2);
  
        if (!isFoundInArr1) {
          result[1].push(item2);
        }
      });
    //   console.log(`测试用例：`, result);
      // 找出 bill_no 相同的元素并合并
      arr1.forEach((item1) => {
        const billNo1 = item1.u_bill_no;
        const matchingItem2 = arr2.find((item2) => item2.bill_no == billNo1);
  
        if (matchingItem2) {
          const mergedItem = {};
          // 处理 arr1 元素的键，添加 ori 后缀
          for (const key in item1) {
            if (item1.hasOwnProperty(key)) {
              if (key != "phid") {
                mergedItem[`${key}_ori`] = item1[key];
              }
            }
          }
          // 处理 arr2 元素的键，添加 ori 后缀
          for (const key in matchingItem2) {
            if (matchingItem2.hasOwnProperty(key)) {
              mergedItem[`${key}`] = matchingItem2[key];
            }
          }
          // 保留原始的 bill_no 键
          mergedItem.bill_no = billNo1;
          result[2].push(mergedItem);
        }
      });
  
      return result;
    }
    // 三大费用带出，最新
    function danjvchaxun() {
    //   console.log(`触发了·····`);
      let mxLock = true;
      if (!mstform.getItem("phid_pc")) return;
      dgrid2.clearRows();
      dgrid3.clearRows();
      dgrid4.clearRows();
      // 实施费用变更明细
      if (dgrid2) {
        $NG.execServer("get_impl_cost_budget_info", { phid_pc: mstform.getItem("phid_pc").getValue() }, function (res) {
        //   console.log(`实施费请求`, res);
          if (res.count == 0) return;
          const data = JSON.parse(res.data);
        //   console.log(res.data);
          //默认增行,批量新增表体数据
          var gridArr = []; //定义表体数组
          let total_amt = 0;
          //请求设备清单的原有数据
        //   console.log(`测试报错`, mstform.getItem("phid_pc").getValue());
          $NG.execServer("getSbqdPayDetailOri", { phid_pc: mstform.getItem("phid_pc").getValue() }, (res) => {
            // console.log(`原实施`, res, mstform.getItem("phid_pc").getValue());
            let _ori = [];
            if (res.count !== 0) {
              _ori = JSON.parse(res.data).reduce((value, item) => {
                value.push(item.extendObjects);
                return value;
              }, []);
            }
            // console.log(`原有实施数据`, _ori);
            let current = data.reduce((value, item) => {
              value.push(item.extendObjects);
              return value;
            }, []);
            const _arr = compareArrays(_ori, current);
            // console.log(`合并的二维数组`, _arr);
  
            //添加现有数据有原有数据没有的
            _arr[0].forEach((el1) => {
              let gridObj = {};
              gridObj.u_bill_no = el1.bill_no;
              gridObj.u_total_impl_amt_ori = el1.u_total_impl_amt;
              gridObj.u_total_impl_labor_amt_ori = el1.u_total_impl_labor_amt;
              gridObj.u_total_daily_amt_ori = el1.u_total_daily_amt;
              gridObj.u_total_sec_dev_amt_ori = el1.u_total_sec_dev_amt;
              gridObj.u_source_phid = el1.u_source_phid;
              gridArr.push(gridObj);
            });
            //添加现有数据没有原有数据有的
            _arr[1].forEach((el2) => {
              let gridObj = {};
              gridObj.u_bill_no = el2.bill_no;
              gridObj.u_total_impl_amt = el2.u_total_impl_amt;
              gridObj.u_total_impl_labor_amt = el2.u_total_impl_labor_amt;
              gridObj.u_total_daily_amt = el2.u_total_daily_amt;
              gridObj.u_total_sec_dev_amt = el2.u_total_sec_dev_amt;
              gridObj.u_source_phid = el2.phid;
              gridArr.push(gridObj);
            });
            //添加都有的
            _arr[2].forEach((el4, index) => {
            //   console.log(`合并数据`, el4);
              let gridObj = {};
              gridObj.u_bill_no = el4.bill_no;
              gridObj.u_total_impl_amt = el4.u_total_impl_amt;
              gridObj.u_total_impl_amt_ori = el4.u_total_impl_amt_ori;
              gridObj.u_total_impl_labor_amt = el4.u_total_impl_labor_amt;
              gridObj.u_total_impl_labor_amt_ori = el4.u_total_impl_labor_amt_ori;
              gridObj.u_total_daily_amt = el4.u_total_daily_amt;
              gridObj.u_total_daily_amt_ori = el4.u_total_daily_amt_ori;
              gridObj.u_total_sec_dev_amt = el4.u_total_sec_dev_amt;
              gridObj.u_total_sec_dev_amt_ori = el4.u_total_sec_dev_amt_ori;
              gridObj.u_source_phid = el4.phid;
              gridArr.push(gridObj);
            });
            // console.log(`实施`, total_amt);
            while (!mxLock) {}
            mxLock = false;
            project_amt.amt = project_amt.amt + total_amt;
            mxLock = true;
            //调用新增表体行数据的函数
            dgrid2.addRows(gridArr);
          });
        });
      }
      if (dgrid3) {
        $NG.execServer(
          "get_svc_cost_budget_info",
          {
            phid_pc: mstform.getItem("phid_pc").getValue(),
          },
          function (res) {
            // console.log(`服务请求`, res);
            if (res.count == 0) return;
            const data = JSON.parse(res.data);
            // console.log(res.data);
            //默认增行,批量新增表体数据
            var gridArr = []; //定义表体数组
            var gridCount = res.count; //增加的行数,可根据从数据库从取出的数据总数增行
            let total_amt = 0;
            $NG.execServer("getSbadPayDetailSvcOri", { phid_pc: mstform.getItem("phid_pc").getValue() }, (res) => {
              let _ori = [];
              if (res.count !== 0) {
                _ori = JSON.parse(res.data).reduce((value, item) => {
                  value.push(item.extendObjects);
                  return value;
                }, []);
              }
            //   console.log("服务原", _ori);
              const current = data.reduce((value, item) => {
                value.push(item.extendObjects);
                return value;
              }, []);
              const _arr = compareArrays(_ori, current);
              //添加现有数据有原有数据没有的
              _arr[0].forEach((el1) => {
                let gridObj = {};
                gridObj.u_bill_no = el1.bill_no;
                gridObj.u_total_svc_amt_ori = el1.u_total_svc_amt;
                gridObj.u_total_svc_labor_amt_ori = el1.u_total_svc_labor_amt;
                gridObj.u_total_daily_amt_ori = el1.u_total_daily_amt;
                gridObj.u_source_phid = el1.phid;
                total_amt = Number(el1.u_total_svc_amt) || 0;
                gridArr.push(gridObj);
              });
              //添加现有数据没有原有数据有的
              _arr[1].forEach((el2) => {
                let gridObj = {};
                gridObj.u_bill_no = el2.u_bill_no;
                gridObj.u_total_svc_amt = el2.u_total_svc_amt;
                gridObj.u_total_svc_labor_amt = el2.u_total_svc_labor_amt;
                gridObj.u_total_daily_amt = el2.u_total_daily_amt;
                gridObj.u_source_phid = el2.phid;
                total_amt = Number(el2.u_total_svc_amt) || 0;
                gridArr.push(gridObj);
              });
              //添加都有的
              _arr[2].forEach((el4, index) => {
                // console.log(`合并数据`, el4);
                let gridObj = {};
                gridObj.u_bill_no = el4.bill_no;
                gridObj.u_total_svc_amt = el4.u_total_svc_amt;
                gridObj.u_total_svc_amt_ori = el4.u_total_svc_amt_ori;
                gridObj.u_total_svc_labor_amt = el4.u_total_svc_labor_amt;
                gridObj.u_total_svc_labor_amt_ori = el4.u_total_svc_labor_amt_ori;
                gridObj.u_total_daily_amt = el4.u_total_daily_amt;
                gridObj.u_total_daily_amt_ori = el4.u_total_daily_amt_ori;
                gridObj.u_source_phid = el4.phid;
                total_amt = Number(el4.u_total_svc_amt) || 0;
                gridArr.push(gridObj);
              });
  
            //   console.log(`服务`, total_amt);
              while (!mxLock) {}
              mxLock = false;
              project_amt.amt = project_amt.amt + total_amt;
              mxLock = true;
              //调用新增表体行数据的函数
              dgrid3.addRows(gridArr);
            });
          }
        );
      }
      if (dgrid4) {
        $NG.execServer("getDevCostBudgetInfo", { phid_pc: mstform.getItem("phid_pc").getValue() }, function (res) {
        //   console.log(`研发费请求`, res);
          if (res.count == 0) return;
          const data = JSON.parse(res.data);
        //   console.log(res.data);
          //默认增行,批量新增表体数据
          var gridArr = []; //定义表体数组
          var gridCount = res.count; //增加的行数,可根据从数据库从取出的数据总数增行
          $NG.execServer("getSbqdPayDetailSelfOri", { phid_pc: mstform.getItem("phid_pc").getValue() }, (res) => {
            // console.log("原二开费用", res);
            let _ori = [];
            if (res.count !== 0) {
              _ori = JSON.parse(res.data).reduce((value, item) => {
                value.push(item.extendObjects);
                return value;
              }, []);
            }
            let current = data.reduce((value, item) => {
              value.push(item.extendObjects);
              return value;
            }, []);
            const _arr = compareArrays(_ori, current);
            //添加现有数据有原有数据没有的
            _arr[0].forEach((el1) => {
              let gridObj = {};
              gridObj.u_bill_no = el1.bill_no;
              gridObj.u_rdrg_expenses_total_ori = el1.u_total_labor_amt;
              gridObj.u_rcfy_total_ori = el1.u_total_daily_amt;
              gridObj.u_rd_expenses_ori = el1.u_rd_expenses;
              gridObj.u_source_phid = el1.phid;
              total_amt = Number(el1.u_total_dev_amt) || 0;
              gridArr.push(gridObj);
            });
            //添加现有数据没有原有数据有的
            _arr[1].forEach((el2) => {
              let gridObj = {};
              gridObj.u_bill_no = el2.bill_no;
              gridObj.u_rdrg_expenses_total = el2.u_total_labor_amt;
              gridObj.u_rcfy_total = el2.u_total_daily_amt;
              gridObj.u_rd_expenses = el2.u_total_dev_amt;
              gridObj.u_source_phid = el2.phid;
              total_amt = Number(el2.u_total_dev_amt) || 0;
              gridArr.push(gridObj);
            });
            //添加都有的
            _arr[2].forEach((el4, index) => {
            //   console.log(`合并数据`, el4);
              let gridObj = {};
              gridObj.u_bill_no = el4.bill_no;
              gridObj.u_rdrg_expenses_total = el4.u_total_labor_amt;
              gridObj.u_rdrg_expenses_total_ori = el4.u_rd_expenses_ori;
              gridObj.u_rcfy_total = el4.u_total_daily_amt;
              gridObj.u_rcfy_total_ori = el4.u_rdrg_expenses_total_ori;
              gridObj.u_rd_expenses = el4.u_total_dev_amt;
              gridObj.u_rd_expenses_ori = el4.u_rd_expenses_ori;
              gridObj.u_source_phid = el4.phid;
              total_amt = Number(el4.u_total_dev_amt) || 0;
              gridArr.push(gridObj);
            });
            // console.log(`yanfa `, total_amt);
            while (!mxLock) {}
            mxLock = false;
            project_amt.amt = project_amt.amt + total_amt;
            mxLock = true;
            //调用新增表体行数据的函数
            dgrid4.addRows(gridArr);
          });
        });
      }
    }
    let qzLock = true
    //获取签证明细（合同明细）
    function getQzInfo() {
        if(!qzLock) return
        qzLock = false
      setTimeout(() => {
        const gridArr = [];
        // console.log(`签证单子`, dgrid5);
        if (dgrid5) {
        //   console.log(`合同gi`, mstform.getItem("u_cnt_id").getValue());
          $NG.execServer("getCntDetail", { phid: mstform.getItem("u_cnt_id").getValue() }, (res) => {
            console.log(`签证请求`, res);
            if (res.count == 0) return;
            const _data = JSON.parse(res.data).reduce((value, item) => {
              value.push(item.extendObjects);
              return value;
            }, []);
            let _temp = JSON.parse(res.data);
            _temp = _temp.sort((a, b) => (Number(a.extendObjects.item_no) || 0) - (Number(b.extendObjects.item_no) || 0));
            window.cnt_no_max = Number(_temp[_temp.length - 1].extendObjects.item_no);
            console.log(`签证明细`, _data);
            _data.forEach((el5) => {
              const gridObj = {};
              gridObj.u_cnt_no = el5.item_no;
              gridObj.u_cnt_list_name = el5.item_name;
              gridObj.u_unit = el5.phid_unit;
              gridObj.u_unit_EXName = el5.msname;
              gridObj.u_tech_params = el5.user_jscs;
              gridObj.u_pc_subitem_category = el5.user_gcfxfl;
              gridObj.u_secp = el5.user_ggxh;
              gridObj.u_qty_ori = el5.qty;
              gridObj.u_qty = el5.qty;
              gridObj.u_rate = el5.taxrate;
              gridObj.u_prc_ori = el5.prc_fc;
              gridObj.u_cnt_prc = el5.prc_fc;
              gridObj.u_prc_vat_ori = el5.prc_vat_fc;
              gridObj.u_cnt_prc_vat = el5.prc_vat_fc;
              gridObj.u_amt_vat_ori = el5.amt_vat_fc;
              gridObj.u_cnt_amt_vat = el5.amt_vat_fc;
              gridObj.u_amt_ori = el5.amt_fc;
              gridObj.u_cnt_amt = el5.amt_fc;
              gridObj.u_source_phid = el5.cntd_phid;
              gridArr.push(gridObj);
            });
            if (page.oType == "view") return;
            console.log('执行签证插入',dgrid5);
            dgrid5.addRows(gridArr)
            // dgrid5.clearRows().then(() => {
            //   dgrid5.addRows(gridArr);
            //   qzLock = true
            // });
          });
        }
      }, 300);
    }
    //获取合同数量
    function getCntCount(table, key, fun) {
      if (!$NG.getCmpApi(table).getItem("phid_pc").getValue()) return;
      $NG.execServer(
        "getCntCount",
        {
          type: 1,
          phid_pc: $NG.getCmpApi(table).getItem("phid_pc").getValue(),
        },
        (res) => {
        //   console.log(res, "count");
          switch (res.count) {
            case 0:
              return;
            case 1:
              const datas = JSON.parse(res.data)[0].extendObjects;
              const temp_map = {};
              temp_map[key] = datas.phid;
              temp_map[`${key}_EXName`] = datas.bill_name;
              $NG.updateState((updater) => {
                updater.data[table].setProps({
                  ...temp_map,
                });
                setTimeout(() => {
                  if (fun) {
                    fun();
                  }
                }, 200);
              });
          }
        }
      );
    }
    // 签证明细 -- 设备清单明细
    function qzInfoToSbqdInfo() {
      let row5 = dgrid5.getRows();
      const row1 = dgrid1.getRows();
      if (row5.length !== 0) {
        // mstform.setReadOnly("u_alter_type", true);
        $NG.updateUI((updater) => {
          updater.fieldSetForm.p_form_equipment_chg.PCFieldSetPanelGroup1.u_alter_type.setProps({
            // hidden: true, //隐藏
            // required: true, //必输
            disabled: true, //只读
          });
        });
      } else {
        $NG.updateUI((updater) => {
          updater.fieldSetForm.p_form_equipment_chg.PCFieldSetPanelGroup1.u_alter_type.setProps({
            // hidden: true, //隐藏
            // required: true, //必输
            disabled: false, //只读
          });
        });
        // mstform.setReadOnly("u_alter_type", false);
      }
      // 设置唯一标识
      row5.forEach((item) => {
        if (!item.u_source_phid) {
          if (!item._lsz_set_key) {
            const str = generate15DigitNumber();
            item._lsz_set_key = str;
            item.u_phid = str;
            // 设备清单明细新增行
            dgrid1.addRows({
              u_cnt_item_no: item.u_cnt_no,
              u_cnt_item: item.u_cnt_list_name,
              u_eq_item_no: item.u_cnt_no,
              u_eq_item_name: item.u_cnt_list_name,
              u_change_type: "2",
              u_msunit: item.u_unit, //单位
              u_spec: item.u_secp, //规格
              u_pc_subitem_category: item.u_pc_subitem_category, //分项
              u_brand: item.u_brand, //品牌
              u_tech_params: item.u_tech_params, //技术参数
              u_qty: item.u_qty, //数量
              u_cnt_prc: item.u_cnt_prc, //合同未税单价
              u_cnt_amt_vat: item.u_cnt_amt_vat, //含税单价
              u_cnt_amt: item.u_cnt_amt, //合同未税金额
              _lsz_set_key: item._lsz_set_key,
            });
            row5 = dgrid5.getRows();
          } else {
            // 匹配唯一标识，更改数据
            row1.forEach((elem) => {
              if (elem._lsz_set_key && elem._lsz_set_key == item._lsz_set_key) {
                // console.log(`发生1次`);
                elem.u_cnt_item_no = item.u_cnt_no;
                elem.u_cnt_item_EXName = item.u_cnt_list_name;
                elem.u_cnt_item = item.u_phid;
                elem.u_eq_item_no = item.u_cnt_no;
                elem.u_eq_item_name = item.u_cnt_list_name;
                elem.u_msunit = item.u_unit; //单位
                elem.u_msunit_EXName = item.u_unit_EXName; //单位
                elem.u_spec = item.u_secp; //规格
                elem.u_pc_subitem_category = item.u_pc_subitem_category; //分项
                elem.u_brand = item.u_brand; //品牌
                elem.u_brand_EXName = item.u_brand_EXName; //品牌
                elem.u_tech_params = item.u_tech_params; //技术参数
                elem.u_qty = item.u_qty; //数量
                elem.u_cnt_prc = item.u_cnt_prc; //合同未税单价
                elem.u_cnt_amt_vat = item.u_cnt_amt_vat; //含税单价
                elem.u_cnt_amt = item.u_cnt_amt; //合同未税金额
              }
            });
          }
        }
      });
      // 同时删除逻辑
      row1.forEach((i) => {
        let lock = false;
        if (i._lsz_set_key) {
          row5.forEach((j) => {
            if (i._lsz_set_key && i._lsz_set_key == j._lsz_set_key) {
              lock = true;
            }
          });
          if (!lock) {
            dgrid1.deleteRow(i);
          }
        }
      });
      dgrid1.refreshView();
    }
  
    //匹配物料专用
    function matchingWl(args) {
      const _arr = dgrid1.getRows();
      if (args) {
        fun(args);
      } else {
        _arr.forEach((items) => {
          fun(items);
        });
      }
      //内置函数（多功能控制）
      function fun(items) {
        // console.log(items, items.u_sub_item, items.u_sub_name?.trim(), String(items.u_sub_item_category || "").trim(), String(items.u_sub_item_msunit || "").trim(), items.u_sub_spec?.trim());
        if (items.u_sub_item) {
          $NG.execServer("getItemdataByPhid", { phid: items.u_sub_item }, function (res) {
            window.sNum += 1;
            if (res.count > 0) {
              var data = JSON.parse(res.data)[0].extendObjects; //单返回值
            //   console.log(`匹配信息`, data);
              items.u_sub_item_category = data.phid_resbs;
              items.u_sub_item_category_EXName = data.name;
              items.u_sub_name = data.itemname;
              items.u_sub_spec = data.spec;
              items.u_sub_item_msunit_EXName = data.msunit_name;
              items.u_sub_item_msunit = data.msunit_phid;
              items.u_sub_item_category = data.phid_resbs;
              items.u_sub_item_category_EXName = data.res_bs_name;
              items.u_fwgczdj = data.prc_ad;
            }
            dgrid1.refreshView();
          });
        } else if (!items.u_sub_item && items.u_sub_name?.trim() && String(items.u_sub_item_category || "").trim() && String(items.u_sub_item_msunit || "").trim() && items.u_sub_spec?.trim()) {
          $NG.execServer("getItemDataByName", { itemname: `'${items.u_sub_name}'`, spec: `'${items.u_sub_spec}'`, msunit: items.u_sub_item_msunit }, function (res) {
            window.sNum += 1;
            if (res && res.count > 0) {
            //   console.log("execServer:getItemDataByName");
              let data = JSON.parse(res.data)[0].extendObjects; // 单返回值
              items.u_sub_item = data.phid;
              items.u_sub_item_EXName = data.itemno;
              dgrid1.refreshView();
            //   console.log("接口");
            } else {
              window._list.push({
                user_is_bz: items.user_is_bz,
                ItemName: items.u_sub_name,
                PhidResbs: items.u_sub_item_category,
                PhidMsunit: items.u_sub_item_msunit,
                Spec: items.u_sub_spec,
                ResBsCode: items.u_sub_item_category, // 假设 ResBsCode 是固定值，需根据实际情况调整
                ResourceType: "8570000000000002", // 假设资源类型是固定的
              });
            }
          });
        }
        //2. 更新拟采购项
        if (items.u_pur_item) {
          $NG.execServer("getItemdataByPhid", { phid: items.u_pur_item }, function (res) {
            window.newNum += 1;
            if (res.count > 0) {
              var purdata = JSON.parse(res.data)[0].extendObjects; //单返回值
  
              items.u_pur_item_category = purdata.phid_resbs;
              items.u_pur_item_category_EXName = purdata.name;
              items.u_pur_name = purdata.itemname;
              items.u_pur_spec = purdata.spec;
              items.u_pur_item_msunit_EXName = purdata.msunit_name;
              items.u_pur_item_msunit = purdata.msunit_phid;
              items.u_pur_item_category = purdata.phid_resbs;
              items.u_pur_item_category_EXName = purdata.res_bs_name;
              items.u_pur_guide_prc = purdata.prc_ad;
            } else {
            }
            dgrid1.refreshView();
          });
          $NG.execServer("getIsDj", { phid_wl: items.u_pur_item, phid_pc: mstform.getItem("phid_pc").getValue() }, (res) => {
            window.sNum += 1;
            if (res.count == 0) return;
            const _data = JSON.parse(res.data)[0].extendObjects;
            items.u_priced_prc = _data.u_target_prc;
            items.u_is_priced = 1;
            dgrid1.refreshView();
          });
        } else if (!items.u_pur_item && items.u_pur_name?.trim() && String(items.u_pur_item_category || "").trim() && String(items.u_pur_item_msunit || "").trim() && items.u_pur_spec?.trim()) {
          $NG.execServer("getItemDataByName", { itemname: "'" + items.u_pur_name + "'", spec: "'" + items.u_pur_spec + "'", msunit: items.u_pur_item_msunit }, function (res) {
            window.sNum += 1;
            if (res.count > 0) {
              let data = JSON.parse(res.data)[0].extendObjects; //单返回值
              items.u_pur_item = data.phid;
              items.u_pur_item_EXName = data.itemno;
            //   console.log("接口");
              dgrid1.refreshView();
            } else {
              window._list.push({
                user_is_bz: items.user_is_bz,
                ItemName: items.u_pur_name,
                PhidResbs: items.u_pur_item_category,
                PhidMsunit: items.u_pur_item_msunit,
                Spec: items.u_pur_spec,
                ResBsCode: items.u_pur_item_category, // 假设 ResBsCode 是固定值，需根据实际情况调整
                ResourceType: "2", // 假设资源类型是固定的
              });
            }
          });
        }
  
        //3. 更新拟自制项
        if (items.u_self_item) {
          $NG.execServer("getItemdataByPhid", { phid: items.u_self_item }, function (res) {
            window.sNum += 1;
            if (res.count > 0) {
              var data = JSON.parse(res.data)[0].extendObjects; //单返回值
              items.u_self_item_category = data.phid_resbs;
              items.u_self_item_category_EXName = data.name;
              items.u_self_name = data.itemname;
              items.u_self_spec = data.spec;
              items.u_self_item_msunit = data.msunit_phid;
              items.u_self_item_msunit_EXName = data.msunit_name;
              items.u_self_item_category_EXName = data.res_bs_name;
              items.u_self_item_category = data.phid_resbs;
              items.u_zzzdj = data.prc_ad;
            }
            dgrid1.refreshView();
          });
        } else if (!items.u_self_item && items.u_self_name?.trim() && String(items.u_self_item_category).trim() && String(items.u_self_item_msunit).trim() && items.u_self_spec?.trim()) {
          $NG.execServer("getItemDataByName", { itemname: "'" + items.u_self_name + "'", spec: "'" + items.u_self_spec + "'", msunit: items.u_self_item_msunit }, function (res) {
            window.sNum += 1;
            if (res.count > 0) {
              let data = JSON.parse(res.data)[0].extendObjects; //单返回值
              items.u_self_item = data.phid;
              items.u_self_item_EXName = data.itemno;
              dgrid1.refreshView();
            //   console.log("接口");
            } else {
              window._list.push({
                user_is_bz: items.user_is_bz,
                ItemName: items.u_self_name,
                PhidResbs: items.u_self_item_category,
                PhidMsunit: items.u_self_item_msunit,
                Spec: items.u_self_spec,
                ResBsCode: items.u_self_item_category, // 假设 ResBsCode 是固定值，需根据实际情况调整
                ResourceType: "8570000000000001", // 假设资源类型是固定的
              });
            }
          });
        }
      }
    }
  });
  